package com.wn.demo02;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author yellow Docter
 * @date 2022 -10-28
 * @desc
 */
public class Demo05 {

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException {

        // 01 反射 拿到 Class 对象
        Class<Demo04> clazz = (Class<Demo04>) Class.forName("com.wn.demo02.Demo04");

        Demo04 demo04 = clazz.newInstance();

        //02  拿到所有的Method对象
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            //03 判断method是否有@MyTest 标记的注解
            if (method.isAnnotationPresent(MyTest.class)) {
                // 拿到有 MyTest 注解标记的方法的名称
                System.out.println(method.getName());

                //参数1: 当前的方法是那个对象的
                //参数2: 方法的参数
                //04 反射调用method的方法
                method.invoke(demo04,null);
            }
        }
    }

}
